/**
 *  (c)
 * <p>
 *
 * <p>
 *
 */

package com.nn.smart.bus.service;

import com.nn.smart.bus.commons.tools.page.PageData;
import com.nn.smart.bus.commons.tools.utils.Result;
import com.nn.smart.bus.dto.SysUserDTO;
import com.nn.smart.bus.dto.SysUserOpenIdFormDTO;
import com.nn.smart.bus.dto.epdc.GridLeaderRegisterDTO;
import com.nn.smart.bus.dto.epdc.form.EpdcScripUserInfoFormDTO;
import com.nn.smart.bus.entity.SysUserEntity;
import com.nn.smart.bus.commons.mybatis.service.BaseService;

import java.util.List;
import java.util.Map;

/**
 * 用户管理
 *
 * @author nanning
 * @since 1.0.0
 */
public interface SysUserService extends BaseService<SysUserEntity> {

    PageData<SysUserDTO> page(Map<String, Object> params);

    List<SysUserDTO> list(Map<String, Object> params);

    SysUserDTO get(Long id);

    SysUserDTO getByUsername(String username);

    void save(SysUserDTO dto);

    void update(SysUserDTO dto);

    void delete(Long[] ids);

    /**
     * 修改密码
     *
     * @param id          用户ID
     * @param newPassword 新密码
     */
    void updatePassword(Long id, String newPassword);

    /**
     * 根据部门ID，查询用户数
     */
    int getCountByDeptId(Long deptId);

    /**
     * 网格长注册时，根据手机号，查询网格长管理的所有网格
     *
     * @param mobile
     * @return java.util.List<com.nn.smart.bus.dto.epdc.GridLeaderRegisterDTO>
     * @author nanning
     * @date 2019/10/22 16:19
     */
    Result<GridLeaderRegisterDTO> listGridWhileLeaderRegister(String mobile);

    /**
     * 根据openId获取用户信息
     *
     * @return com.nn.smart.bus.dto.SysUserDTO
     * @params [openId]
     * @author nanning
     * @since 2019/11/20 13:56
     */
    SysUserDTO getSysUserInfoByOpenId(String openId);

    /**
     * 获取部门下的所有用户ID
     *
     * @return java.util.List<java.lang.Long>
     * @params [deptId]
     * @author nanning
     * @since 2019/10/29 16:14
     */
    List<Long> listOfUserIdsByDeptId(Long deptId);

    /**
     * 根据用户名更新用户微信openId
     *
     * @return com.nn.smart.bus.commons.tools.utils.Result
     * @params [sysUserOpenIdFormDto]
     * @author nanning
     * @since 2019/11/20 9:56
     */
    Result modifyOpenIdByUsername(SysUserOpenIdFormDTO sysUserOpenIdFormDto);

    /**
     * 退出登录
     * @param userId
     * @return
     */
    void updateUserOpenId(Long userId);

    /**
     * @Description: 根据部门id，查询部门下的所有用户手机号
     * @Param: [deptId]
     * @return: com.nn.smart.bus.commons.tools.utils.Result<java.util.List<java.lang.String>>
     * @author nanning
     * @Date: 2020-01-09
     */
    Result<List<String>> getUserPhoneByListDeptId(List<Long> deptId);

    /**
     * @Description: 根据议题网格ID查询拥有这个网格数据权限且是网格长的角色，再根据角色查出所有用户手机号
     * @Param: [deptId]
     * @return: com.nn.smart.bus.commons.tools.utils.Result<java.util.List<java.lang.String>>
     * @author nanning
     * @Date: 2020-01-09
     */
    Result<List<String>> getSysGridLeaderPhone(Long deptId);

    /**
     * @Description  根据网格ID和手机号获取用户信息
     * @author nanning
     * @Date  2020/6/22
     * @Param [epdcScripUserInfoFormDTO]
     * @return java.lang.String
     **/
    String getUserInfoByGridAndMobile(EpdcScripUserInfoFormDTO epdcScripUserInfoFormDTO);
    /**
     * @Description  根据临时凭证获取用户信息
     * @author nanning
     * @Date  2020/6/22
     * @Param [scrip]
     * @return com.nn.smart.bus.dto.SysUserDTO
     **/
    SysUserDTO getByScrip(String scrip);

    /**
     * @Description  根据ID获取临时凭证
     * @author nanning
     * @Date  2020/12/11
     * @Param [id]
     * @return java.lang.String
     **/
    String getScripBySysUserId(Long id);
}
